進程間溝通(Interprocess Communication)
- 行程在一個系統內,可能會互相合作或保持獨立。
- 如果行程是合作關係的話,會影響其他行程或是被其他行程影響。
- 如果是獨立關係,並不會影響其他行程或被其他行程影響。
- 行程合作的優點:
- 資料共享。
- 計算速度加快。
- 模塊化且方便。
- 合作性行程需要interprocess communication(IPC)
- IPC有2種設計方法:
- 共享記憶體。
- 傳遞訊息。
Producer-Consumer Problem
- 在合作行程中,生產者行程會產生資料,然後由消費者行程消耗執行。
- 無界緩衝區(unbounded-buffer):沒有限制空間尺寸的緩衝區。
- 有界緩衝區(bounded-buffer):會限制並固定緩衝區的尺寸。
進程間溝通-共享記憶體
- 希望行程溝通之間,有共享的記憶體空間。
- 行程溝通是透過使用者,並非是OS。
- 主要議題是提供允許使者行程,可以在共享記憶體時有同步操作的機制。
- 如何保持記憶體內資料的正確性與完整性,也是一個問題所在。
進程間溝通-訊息傳遞
- 提供一個機制,能夠讓行程間溝通時可以同步操作。
- 訊息系統:在行程與行程間溝通、傳遞訊息時,不借助共享變量。
- IPC提供兩個操作方法:
- 傳送(send)。
- 接收(receive)。
- 訊息的大小可以是固定的,也可以是可改變的。
- 行程與行程溝通間,是需要:
- 建立溝通連接在行程間。
- 訊息改變是透過傳遞與接收。
- 如何建立鏈結?
- 可以同時鏈結超過兩個行程嗎?
- 在一對行程間,可以鏈結多少條?
- 鏈結的容量有多大?
- 鏈結可以容納訊息變化的大小嗎?
- 鏈結方向是單向還是雙向?
- 典型的:共享記憶體、網路等。
- 邏輯的:直接或不直接、同步或不同步、自動或顯示緩衝。
直接式溝通
- 是自動建立。
- 一個鏈結剛好連接一對行程。
- 鏈結可能為單向連接或雙向連接。
非直接式溝通
- 每個郵箱都有個獨特的ID。
- 如果行程間要溝通,只能共享郵箱資料。
- 如果要建立鏈結,只能是行程共享郵箱。
- 鏈結可能會連接多個行程。
- 一對行程間,可能會連接多條鏈結。
- 鏈結可能為單向或雙向。
- 先新增一個郵箱。
- 透過郵箱傳遞或接收訊息。
- 摧毀郵箱。
- 規定在某一時間內,只有一個行程可以接收訊息。
- 由系統決定,是哪個行程接收,再回傳訊息告知是誰收到。
通訊同步(Synchronization)
- 訊息傳遞可能有blocking或non-blocking兩種形式。
- Blocking--同步的方式:
- Blocking send:訊息傳遞出去,行程被Block阻擋,直到對方訊息收到才可再傳送。
- Blocking receive:不做任何表示,直到訊息送來,再回傳收到的資訊。
- Non-blocking--不同步的方式(AJAX):
- Non-blocking send:不管對方有無收到,就是一直送訊息過去。
- Non-blocking receive:接收端只接收有效訊息,或是沒有訊息。